C语言程序问题~`...请大虾指导

来源:百度知道 编辑:UC知道 时间:2024/05/28 02:14:56
void f(int x,int y)
{ int t;
if(x<y){t=x;x=y;y=t;}
}
main()
{ int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
程序运行结果为何是:4,3,5 而不是5,4,3?

函数并不会把改变后的实际参数的值返回到相应变量,也就是说,通过f(x,y)函数后,a,b,c的值改变了,但是该改变值只在f(x,y)函数中起作用,不在其他地方起作用,其他的地方abc值易然而4,3,5
详细:QQ769768842北京邮电大学学生为你解答。

因为你函数是传递的是值,而不是地址,所有main函数的a b c都没有变
void f(int* x,int* y)
{ int t;
if(x<y){t=*x;*x=*y;*y=t;}
}
main()
{ int a=4,b=3,c=5;
f(&a,&b); f(&a,&c); f(&b,&c);
printf("%d,%d,%d\n",a,b,c);
}
程序的结果就是5,4,3了

的确有误,谢谢7楼指出,我没仔细看

4楼的条件表达式还是有些错误,if(x<y)这样是比较指针的地址大小了,就改成if(*x<*y),比较指针指向的地址中存放的值。
void f(int* x,int* y)
{ int t;
if(*x<*y){t=*x;*x=*y;*y=t;}
}
main()
{ int a=4,b=3,c=5;
f(&a,&b); f(&a,&c); f(&b,&c);
printf("%d,%d,%d\n",a,b,c);
}

你这是C语言中的传值问题,传值是把实参的值“拷贝”给形参,运算中是对形参进行操作,实参的值在运算中不会发生变化 要是想改实参的 值应当传址!!!!传址是把实参的地址传给形参,运算中是对实参进行操作,会改变实参的值!!!!

因为f内是取值调用,它是复制了一下再去交换,交换完再把交换的结果丢弃。

这里需要取址调用。习惯是用指针作为参数。

void f(int x,int y)
该函数是传值调用,传值调用不改变参数变量的值,所以输出为a,b,c,的初始值啊!